package model.vo;

import util.CommonConstants;



/**
 * 페이징 처리를 위한 Bean
 * @author 관리자
 *
 */
public class PagingBean {
	//총 게시물 수
	private int totalContent;
	//현재 페이지
	private int nowPage;
	//한 페이지에서 보여줄 게시물 수
	private int numberOfContentPerPage=CommonConstants.CONTENT_NUMBER_PER_PAGE;
	//페이지 그룹에 들어갈 페이지 수
	private int numberOfPageGroup=CommonConstants.PAGEGROUP_NUMBER_PER_PAGE;
	public PagingBean(){}
	public PagingBean(int totalContent,int nowPage){
		this.totalContent=totalContent;
		this.nowPage=nowPage;
	}
	public int getTotalContent() {
		return totalContent;
	}
	public void setTotalContent(int totalContent) {
		this.totalContent = totalContent;
	}
	public int getNowPage() {
		return nowPage;
	}
	public void setNowPage(int nowPage) {
		this.nowPage = nowPage;
	}
	public double getNumberOfContentPerPage() {
		return numberOfContentPerPage;
	}
	public void setNumberOfContentPerPage(int numberOfContentPerPage) {
		this.numberOfContentPerPage = numberOfContentPerPage;
	}
	public int getNumberOfPageGroup() {
		return numberOfPageGroup;
	}
	public void setNumberOfPageGroup(int numberOfPageGroup) {
		this.numberOfPageGroup = numberOfPageGroup;
	}
	@Override
	public String toString() {
		return "PagingBean [nowPage=" + nowPage + ", numberOfContentPerPage="
				+ numberOfContentPerPage + ", numberOfPageGroup="
				+ numberOfPageGroup + ", totalContent=" + totalContent + "]";
	}
	/**
	 * 총 페이지 수 리턴 ex) 15 - 3, 16 - 4 page 리턴
	 * 전체 게시물 수(db에서 가져오기) % 한페이지에 보여질 게시물 수(ex:5) 
	 * 0 이면 나눈 값이 페이지 수
	 * 0이 아니면 나눈값 + 1
	 * @return
	 */
	public int getTotalPage(){
		int num=(int) (totalContent%this.numberOfContentPerPage); //디쓰를 쓰는이유 위의 선언되있는 멤버 변수를
		int totalPage=0; 												//쓰기 위해서
		if(num==0){
			totalPage=(int) (totalContent/this.numberOfContentPerPage);
		}else{
			totalPage=(int) (totalContent/this.numberOfContentPerPage+1);
		}
		return totalPage;
	}
	/**
	 * 										전체 게시물		전페 페이지수	4개의 페이지의 가지는 그룹수
	 * 	 * 전체 페이지 그룹 수 리턴. 23 개의 게시물 -> 5 페이지 -> 2그룹
	 * 총 페이지 수 % Page group 내 페이지 수(4) 
	 * --> 0이면 나눈 값
	 * 0이 아니면 나눈값 + 1 
	 * @return
	 */
	public int getTotalPageGroup(){
		int num=getTotalPage()%this.numberOfPageGroup;
		int totalGroup=0;
		if(num==0){
			totalGroup=getTotalPage()/this.numberOfPageGroup;
		}else{
			totalGroup=getTotalPage()/this.numberOfPageGroup+1;
		}
		return totalGroup;
	}
	/**
	 * 현재 페이지가 속한 페이지 그룹 번호 리턴
	 * 현재 페이지 % Page group 내 페이지 수
	 * 	 * --> 0이면 나눈 값
	 * 0이 아니면 나눈값 + 1 
	 * @return
	 */
	public int getNowPageGroup(){
		int num=nowPage%this.numberOfPageGroup;
		int nowGroup=0;
		if(num==0){
			nowGroup=nowPage/this.numberOfPageGroup;
		}else{
			nowGroup=nowPage/this.numberOfPageGroup+1;
		}
		return nowGroup;
	}
	/**
	 * 현재 페이지가 속한 페이지 그룹의 시작 페이지 번호를 리턴
	 * Page Group의 page 수 * (현재 페이지 그룹 -1) +1
	 * @return
	 */
	public int getStartPageOfPageGroup(){
		// 이전 그룹의 마지막 페이지를 구한 다음 +1 하면 시작 페이지가 된다.
		int num=this.numberOfPageGroup*(getNowPageGroup()-1)+1;
		return num;
	}
	/** 
	 * 현재 페이지가 속한 페이지 그룹의 마지막 페이지 번호 리턴
	 * 현재 페이지 그룹 * 페이지 그룹내 페이지 수
	 * 12345678910
	 * 4 * 페이지 그룹수 (ex: 4*2=8)
	 * 단! 결과가 전체 페이지 수보다 클 경우 전체 페이지 수가 마지막 페이지로 되어야함.
	 * 4 * 3= 12 > 10 이면 그냥 10이 마지막 페이지
	 * @return
	 */
	public int getEndPageOfPageGroup(){
		int num=getNowPageGroup()*this.numberOfPageGroup;
		if(num>getTotalPage()){
			num=getTotalPage();
		}
		return num;
	}
	/**
	 * 이전 페이지 그룹이 있는 지 확인하여 있으면 true 없으면 false 리턴
	 * 현재 페이지 그룹이 1 보다 크면 true 
	 * @return
	 */
	public boolean isPreviousPageGroup(){
		boolean flag=false;
		if(getNowPageGroup()>1){
			flag=true;
		}
		return flag;
	}
	/**
	 * 다음 페이지 그룹이 있는 지 확인
	 * 현재 페이지 그룹이 마지막 페이지 그룹보다 작으면 true
	 * @return
	 */
	public boolean isNextPageGroup(){
		boolean flag=false;
		if(getNowPageGroup()<getTotalPageGroup()){
			flag=true;
		}
		return flag;
	}
}
